iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 21
2
Modern Web

30天學習Spring MVC系列 第 21

Day 21 Spring Boot 單元測試(Unit Test)

  • 分享至 

  • xImage
  •  

前言

基本上每寫完一個Controller你要有個習慣去對這個Controller去撰寫一個測試程式,那你可能會問說,這樣不就會讓我們的產出下降嗎?

是的,撰寫測試程式的確會造成產出的下降,但是為何我們還是要去撰寫測試程式呢?
原因是因為撰寫測試程式的好處在於提升程式交付的品質.
為何不趕快將程式趕完直接開工下個專案賺錢呢?
在交付程式之前你有辦法確保說程式不是因為工程師的你而導致發生的錯誤嗎?
如果我們事先撰寫了測試程式,而最後交付到了使用者手上是否能證明了並非是工程師的問題而導致了程式發生了錯誤.但是還是會有漏洞產生,為了要將程式不斷的改善與整合,最近幾年的DevOps就誕生了,創造了一個新的軟體工程的開發,最終目的達到持續整合,持續改善,持續交付

Spring Boot提供的測試函式庫

  • JUnit -java application標準
  • SpringTest -提供了對Spring Boot應用程式的支持
  • AssertJ -斷言函式庫
  • Hamcrest -匹配器對象函式庫
  • JSONassert -JSON斷言函式庫
  • JSONPath -用於JSON的Xpath函式庫

如何撰寫測試程式?

1.在創建Spring Boot專案時在我們的檔案管理左方就已經為我們創建好目錄及package了,把她打開來吧!如下圖:
https://ithelp.ithome.com.tw/upload/images/20180109/20107812BhmTYFiUdR.png

Spring Boot 測試程式配置及目錄介紹

專案目錄架構

└── src
    └── test
        └── java
            └── Tutorial2ApplicationTests.java

pom.xml中要添加的依賴

    <dependency>
        <groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
	</dependency>

如何執行測試?

點擊Maven右鍵->Run as->Maven test
點擊之後將會開始下載spring-boot-starter-test依賴jar包

https://ithelp.ithome.com.tw/upload/images/20180109/20107812EzxjUcESGv.png

當下載完成,並且執行完畢之後會看到紅框內的測試訊息,Build Success,run: 1, Failures: 0, Errors: 0, Skipped: 0代表著我們的測試程式沒有問題,可以正常運行
https://ithelp.ithome.com.tw/upload/images/20180109/20107812xSRW8CGOMi.png

撰寫測試程式

package com.example.demo;

import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.http.MediaType;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.MvcResult;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.web.context.WebApplicationContext;

import com.tutorial.Tutorial2Application;
import com.tutorial.Dao.MemberApiRepository;	




@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = Tutorial2Application.class)
@WebAppConfiguration
public class Tutorial2ApplicationTests {
	@Autowired
	private MemberApiRepository memberApiRepository; //加入MemberRepository
	@Autowired
    private WebApplicationContext webApplicationContext;
	MockMvc mvc; //創建MockMvc類的物件
	
	@Before
	public void setup(){
//		Memberaccount memberaccount = new Memberaccount();
//		memberaccount.setId(1);
		mvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
	}
	
	
	
	@Test
	public void contextLoads() throws Exception {
		String uri = "/memberApi/1";
		MvcResult result = mvc.perform(MockMvcRequestBuilders.get(uri).accept(MediaType.APPLICATION_JSON)).andReturn();
		int status = result.getResponse().getStatus();
		System.out.println(status);
		Assert.assertEquals("錯誤",200,status);
	}

}

重點與心得

1.假日會介紹發佈我們的Spring Boot專案建構的Spring MVC網站
2.下一篇介紹測試框架MockMVC,明天介紹會連同錯誤的配置及版本問題不同一起做介紹網路上的教學有些不適用於2.0.0.BUILD-SNAPSHOT的Spring Boot版本及全部配置的解析

參考資源

1.(https://spring.io/guides/gs/testing-web/ )
2.(https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-testing.html )
3.(https://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/ )


上一篇
Day 20 使用Advanced REST client請求RESTful Web Service資源
下一篇
Day 22 Spring Boot 單元測試(Unit Test)-MockMvc框架介紹
系列文
30天學習Spring MVC30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言